package com.gimi.cloud.bbp.manage.service.page.impl;

import java.util.List;

import javax.transaction.Transactional;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.gimi.cloud.bbp.common.utils.MyBeanUtils;
import com.gimi.cloud.bbp.dao.dao.page.PageConfigDao;
import com.gimi.cloud.bbp.dto.page.PageConfigDTO;
import com.gimi.cloud.bbp.entity.page.PageConfig;
import com.gimi.cloud.bbp.manage.service.page.PageConfigService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.entity.Example.Criteria;

@Service
public class PageConfigServiceImpl implements PageConfigService{
	
	@Autowired private PageConfigDao pageConfigDao; 
	
	@Override
	@Transactional
	public PageConfig savePageConfig(PageConfigDTO configDTO) { 
		PageConfig pageConfig = null;
		if (configDTO.getId() != null) {
			pageConfig = pageConfigDao.queryBy("id", configDTO.getId());
		}
		if (pageConfig != null) {
			MyBeanUtils.copyPropertiesIgnoreNullAndEmptyStr(configDTO, pageConfig);
			pageConfigDao.baseUpdateByPrimaryKey(pageConfig);
		} else {
			pageConfig = new PageConfig();
			MyBeanUtils.copyPropertiesIgnoreNullAndEmptyStr(configDTO, pageConfig);
			pageConfigDao.baseInsert(pageConfig);
		}
		return pageConfig;
	}
	
	@Override
	public PageInfo<PageConfig> getPageConfigList(PageConfigDTO configDTO){
		Example example = new Example(PageConfig.class);
		example.setOrderByClause("id desc");
		Criteria criteria = example.createCriteria();
		criteria.andEqualTo("isDelete", "0");
		if (configDTO.getPageName() != null) {
			criteria.andLike("pageName", "%"+ configDTO.getPageName() + "%");
		}
		PageHelper.startPage(configDTO.getPage(), configDTO.getColumn());
		List<PageConfig> pageConfigs =  pageConfigDao.selectByExample(example);
		return new PageInfo<>(pageConfigs);
	}
	
	@Override
	@Transactional
	public Long delPageConfig(Integer... ids){
		if (ids == null || ids.length < 1) {
			return 0L;
		}
		return pageConfigDao.delPageById(StringUtils.join(ids, ","));
	}
	
	@Override
	public PageConfigDTO getInfoById(Integer id) {
		return pageConfigDao.getPageAllById(id);
	}
}
